dB−BASIC for MZ−2200 ――――――――――――――――――――――――――――――――――――――― I/O 1984年 1月掲載 MZ−2000/2200 マシン語 08000H−0FDDFH 起動方法 IPLからロード ――――――――――――――――――――――――――――――――――――――― 特徴 MZ−2200用のdB−BASICは、ほぼX1用と同様の特徴を持っています。 それらを列記すると次のとおりです。 ●コマンドの拡張……ユーザーが必要に応じて、独自にコマンドを定義できます。           その方法は、まず機械語ルーチンのアドレスを入力。           これで定義は完了です。           セーブすれば拡張コマンドがいつでも使えます。 ●TEXT編集が便利……(1)指定した文字列をプログラムの中から捜し出し、                画面またはプリンタに表示(FIND)。             (2)RENUMにより行番号の整理が可能。             (3)メモリ内のプログラムを混合できる(MERGE)。             (4)TRACE ON (OFF)で、                プログラムの実行状能を追跡(解除)。                デバック時に便利です。 ●INPUT命令を機能アップ……INPUT文にフォーマットが組めるため、                 必要外の入力を受けつけず、                 誤って操作するのを防ぎます。 ●分岐文を強化……(1)CASE文で、一連の条件判定を行なう。          (2)GOTO、GOSUBなどのステートメントの参照先は             行番号だけでなくラベル、変数が使えるため、             プログラムも効率よく作成できます。 ●機械語が使いやすい……(1)Z80のレジスタに直接、値を渡せます。                機械語とのリンクが簡単です(USR)。             (2)2バイトのPEEK、POKEが可能                            (PEEW、POKW)。             (3)XFER$により中間言語の文字列を得、                EXECにより、それを実行。 ●タテ書きができるプリント命令……(1)タテ書き表記、表示ができます                               (PRINT$)。                  (2)テキスト画面およびグラフィック各色を                     プリンタでハード・コピ−。                     さらに、特に大きな特徴としたいのが                     GPRINTができることです。                     これについての詳細は別記します. 疑似PCGについて X1の場合はハードが専用にPCGのメモリを持っていますが、 MZ−2200(2000)にはないのでBASIC側に持たせました。 それぞれを以下に説明します。 [一般ステートメント] ●DEFCHR$ [機 能]メモリのフリーエリアに疑似PCGのキャラクタ・パターン・データを     定義します。 [書 式]DEFCHR$(キャラクターコード)=(パターン・データ・ストリング) [省略形]DEFCH. [解 説]dB−BASICでは、ユーザーが定義できる     疑似キャラクタ・ジェネレータ(Programble Character Generator)機能を     有し、キャラクタ・パターンを設定できます。     キャラクタ・パターンは縦横8×8ドットです。     青、赤、緑、それぞれの色ごとにパターンを指定します。     パターンは横方向8ドットを1バイト・データで指定します。     したがって1つの色のパターン・データは8バイト・データで構成され、     3色(青、赤、緑)で指定しますので、     1つのキャラクタに対するパターン・データは     24バイトのデータとなります。     定義したパターンの表示は、GPRINT文で行ないます。 ◎疑似PCGデータのメモリ・エリア  1つの疑似PCGエリアに定義できるキャラクタは 256個です。  ポインタのトップ・アドレスはE000H(デフォルト値)です。  また、このトップ・アドレスはPCG文によって定義できます。  データは1キャラクタ当たり24バイトで、  キャラクタ・コードの0からFFHまで順に 256個定義されます。  合計6144バイトのデータとなります。  また、PCG文を使用することによって同じキャラクタ・コードに  別のパターンを定義できます(PCG参照)。 ・――――――――――――――――――――――・ |デフォルト                   | |のとき←+――――――――――――+――――| |E000H |キャラクタ・コード0に対応する | ↑  | |    |パターン・データ       | |  | |    |      (24バイト)| |  | | E018H+――――――――――――| |  | |    |キャラクタ・コード1に対応する | |  | |    |パターン・データ       | |  | |    |      (24バイト)| |  | |    |――――――――――――|256キャラクタ| |    |     :      |(6144  | |    |     :      |  バイト)| |    ‖     :      ‖ |  | |    |     :      | |  | |    |     :      | |  | | F7E8H+――――――――――――| |  | |    |キャラクタ・コードFFHに対応する| |  | |    |パターン・データ       | |  | |    |      (24バイト)| ↓  | | F800H+――――――――――――+――――| ・――――――――――――――――――――――・ ◎ドット・パターン・データ  横8ドットが1バイト・データです。  このとき、パターン・セットするところを1、それ以外を0とし、  2進数と考えますと8ビット・データとなり、  16進数で表わすと1バイト・データとなります。  ・―――――――――――――――――――――――――――・  |          セット    セット          |  |   ・―――――――――――――――・       |  | LSB | | | |■| | |■| |MSB      |  |   ・―――――――――――――――・       |  |    ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ……(00010010)|  |    0 0 0 1 0 0 1 0        |  |    |     | |     |        |  |    ・―――――・ ・―――――・        |  |       1       2    ……(12)H  |  ・―――――――――――――――――――――――――――・  この16進のデータがそれぞれ横8ドットのデータに対応するので、  1つのキャラクタ・パターンは8バイトの16進データからなります。  PCGでは青、赤,緑のそれぞれがキャラクタ・パターンを持っていますので、  この8バイトの16進データが各色分けをします。  ・――――――――――――――――――――――・  |   青のパターン 赤のパターン 緑のパターン   |  |   ロロロロロロロロ  ロロロロロロロロ  ロロロロロロロロ   |  |   ロロロロロロロロ  ロロロロロロロロ  ロロロロロロロロ   |  |   ロロロロロロロロ  ロロロロロロロロ  ロロロロロロロロ   |  |   ロロロロロロロロ  ロロロロロロロロ  ロロロロロロロロ   |  |   ロロロロロロロロ  ロロロロロロロロ  ロロロロロロロロ   |  |   ロロロロロロロロ  ロロロロロロロロ  ロロロロロロロロ   |  |   ロロロロロロロロ  ロロロロロロロロ  ロロロロロロロロ   |  |   ロロロロロロロロ  ロロロロロロロロ  ロロロロロロロロ   |  |   8バイト・データ 8バイト・データ 8バイト・データ  |  ・――――――――――――――――――――――・  8バイト・データ+8バイト・データ+8バイト・データ、  計24バイトのデータからPCGによる  1キャラクタのパターン・データは構成されます。  3色の合成ですので結果的にキャラクタ・パターンは  1ドットに対し8色から1色選択できます。        1キャラクタ・パターン  ・――――――――――――――――――――――・  |  ――――――8 ドット――――――     |  | ・―――――――――――――――・ -   |  | | | | | | | | | | |  |  | |―+―+―+―+―+―+―+―| |  |  | | | | | | | | | | |  |  | |―+―+―+―+―+―+―+―| |  |  | | | | | | | | | | |  |  | |―+―+―+―+―+―+―+―| |  |  | | | | | | | | | | |  |  | |―+―+―+―+―+―+―+―|8 ドット |  | | | | | | | | | | |  |  | |―+―+―+―+―+―+―+―| |  |  | | | | | | | | | | |  |  | |―+―+―+―+―+―+―+―| |  |  | | | | | | | | | | |  |  | |―+―+―+―+―+―+―+―| |  |  | | | | | | | | | | |  |  | ・―――――――――――――――・ -   |  ・――――――――――――――――――――――・        PCGのカラー定義  ・――――――――――――――――――――――・  |     青パターンデータ            |  |    □□□□□□□□→00        |  |    □□□■■□□□→18        |  |    □□■□□■□□→24        |  |    ■■□□□□■■→C3        |  |    ■■■□□■■■→E7        |  |    □■□■■□■□→5A        |  |    □□■□□■□□→24        |  |    □■□□□□■□→42        |  |    B$=HEXCHR$("001824C3E75A2442")   |  |                      |  |     赤パターンデータ            |  |    □□□□□□□□→00        |  |    □□□□□□□□→00        |  |    □□□■■□□□→18        |  |    □□■■■■□□→3C        |  |    □□□■■□□□→18        |  |    □□■□□■□□→24        |  |    □□□□□□□□→00        |  |    □□□□□□□□→00        |  |    R$=HEXCHR$("0000183C18240000")   |  |                      |  |     緑パターンデータ            |  |    □□□□□□□□→00        |  |    □□□□□□□□→00        |  |    □□□■■□□□→18        |  |    □□■□□■□□→24        |  |    □□□■■□□□→18        |  |    □□□□□□□□→00        |  |    □□□□□□□□→00        |  |    □□□□□□□□→00        |  |    G$=HEXCHR$("0000182418000000")   |  |                      |  ・――――――――――――――――――――――・        サンプル・プログラム  ・――――――――――――――――――――――・  | |  | 100 WIDTH 40:SCREEN 7 |  | 110 B$=HEXCHR$("001824C3E75A2442") |  | 120 R$=HEXCHR$("0000183C18240000") |  | 130 G$=HEXCHR$("0000182418000000") |  | 140 DEFCHR$(0)=B$+R$+G$ |  | 150 DEFCHR$(32)=HEXCHR$(STRING$(24,"00")) |  | 160 CLS 4 |  | 170 GPRINT CHR$(0);CHR$(0) |  | 180 GPRINT:GPRINT |  | 190 GPRINT CHR$(0),CHR$(0) |  | 200 FOR I=0 TO 38 |  | 210 LOCATE I,10:GPRINT" "+CHR$(0); |  | 220 WAIT 1 |  | 230 NEXT I |  | 240 END |  | |  ・――――――――――――――――――――――・ [注 意]G−RAM必要(MZ−2000)     PCGに定義したキャラクタを表示する場合には、     グラフィックに表示しますので、     SCREEN文であらかじめグラフィック・モードにします。     パターン・データは文字列です。     テキスト・エリア(変数)やスタック・エリアが、     疑似PCGエリアと重なると     スタックや変数がこわれてしまいます。 [参 照]PCG,GPRINT,GPRINT USING [スクリーン・ステートメント] ●GPRINT [機 能]疑似PCGで定義したキャラクタを表示する。 [書 式]GPRINT〔#引数,〕式〔.式……〕 [省略形]GP. [解 説]引数は次のとおりです(省略は0と同し)。     0:PSET (パターンをそのまま画面に表示する)     1:XOR  (パターン・データと画面上のグラフィックの             各ビットごとに XORをとって表示する)     2:OR  (各ビットごとにORをとる)     式はPRINT文 と同様に行ないます。     DEFCHR$ でパターン定義した疑似PCGキャラクタを表示します。 [注 意]G−RAMが必要です(MZ−2000)。     グラフィックへの表示です。 [参 照]GPRINT USING,DEFCHR$,PCG        サンプル・プログラムリスト  ・――――――――――――――――――――――――――・  | 100 WIDTH 40:SCREEN 7:CLS 4 |  | 110 DEFCHR$(&HFF)=HEXCHR$(11001824C3E75A244200001 |  | 83C1B24000000001B2418000000") |  | 120 LINE(50,0)-(110,150),PSET,1,BF |  | 130 LINE(110,0)-(170,150),PSET,2,BF |  | 140 LINE(170,0)-(230,150),PSET,3,BF |  | 150 LINE(230,0)-(290,150),PSET,4,BF |  | 160 LINE(290,0)-(350,150),PSET,5,BF |  | 170 LINE(350,0)-(410,150),PSET,6,BF |  | 180 LINE(410,0)-(470,50),PSET,6,BF |  | 190 ' |  | 200 FOR I=0 TO 34 |  | 210 LOCATEI,1:GPRINT CHR$(&HFF) |  | 220 LOCATEI,6:GPRINT#0,CHR$(&HFF) |  | 230 LOCATEI,11:GPRINT#1,CHR$(&HFF) |  | 240 LOCATEI,16:GPRINT#2,CHR$(&HFF) |  | 250 WAIT 1 |  | 260 NEXT I |  | 270 LOCATE 36,1:PRINT "omit" |  | 280 LOCATE 36,6:PRINT "PSET" |  | 290 LOCATE 36,11:PRINT "XOR" |  | 300 LOCATE 36,16:PRINT "OR" |  | 310 PRINT:PRINT |  | 320 END |  ・――――――――――――――――――――――――――・ ●GPRINT USING [機 能]疑似PCGで定|義したキャラクタを指定の書式で表示する。 [書 式]GPRINT〔#引数,〕USING "書式制御文字列"|,|〔式……〕|;| [省略形]GP.USI. [解 説]表示キャラクタが、DEFCHR$ で定義した     疑似PCGデータ・パターンであることを除けば、     PRINT USINGと同様です。 [注 意]G-RAMが必要です(MZ−2000)。グラフィックへの表示です。 [参 照]DEFCHIR$,GPRINT,PCG        サンプル・プログラム  ・――――――――――――――――――――――――――・  | 100 A0$=HEXCHR$("00003E2222223E00") |  | 110 A1$=HEXCHR$("000000007E000000") |  | 120 A2$=HEXCHR$("00003C0000007E00") |  | 130 A3$=HEXCHR$("00003C0018007E00") |  | 140 A4$=HEXCHR$("00007F5557617F00") |  | 150 DEFCHR$(&H30)=A0$+A0$+A0$ |  | 160 DEFCHR$(&H31)=A1$+A1$+A1$ |  | 170 DEFCHR$(&H32)=A2$+A2$+A2$ |  | 180 DEFCHR$(&H33)=A3$+A3$+A3$ |  | 190 DEFCHR$(&H34)=A4$+A4$+A4$ |  | 200 WIDTH 40:SCREEN 7:CLS 4 |  | 210 I=12340 |  | 220 PRINT "I=";:GPRINT USING "#########";I |  | 230 PRINT:PRINT |  | 240 FOR J=0 TO 4 |  | 250 GPRINT USING " ## ### ####";J,J*10,J*100 |  | 260 NEXT J |  | 270 END |  ・――――――――――――――――――――――――――・ [一般関数(システム変数)] ●PCG [機 能]DEFCHR$ によって格納するデータのメモリ上のトップ・アドレスを     与える。 [書 式]PCG=アドレス,A=PCG [省略形]PC [解 説]初期設定値はE000Hです(デフォルト値)。     テキストのエンド・アドレスがE000H以降になる場合に、     DEFCHR$ を実行するとE000H以降の部分のテキスト内容は失なわれ、     疑似PCGデータを格納してしまいます。     このようにテキストのエンド・アドレスがE000Hより後になる場合、     システム変数PCGでそのときのテキストのエンド・アドレスより後に、     疑似PCGデータのトップ・アドレスを設定してください。     また、BASICテキストの上限は     CLEAR文 によっても変えることができます。     DEFCHR$ による定義データが多くなったり     スタック領域を多用するプログラムでは、     スタック領域および文字領域を壊してしまいます。     PCGおよびCLEAR文 によって、     スタック・エリアおよび文字領域を確保してください。     PCGを利用すると、     実質的に 256以上のパターン定義が可能となります。     同じキャラクタ・コードに対し違うパターン・データを     A,Bにそれぞれ定義します。     PCGによってそれぞれを選択して表示します。     ・――――――――――――――――――・     | 10 PCG=&HC000 |     | 20 DEFCHR$(&HFF)=" |     | 30 PCG=&HE000 |     | 40 DEFCHR$(&HFF)=" |     | 50 PRINT CHR$(&HFF) |     | 60 PCG=&HC000:GPRINT CHR$(&HFF) |     | 70 PCG=&HE000:GPRINT CHR$(&HFF) |     ・――――――――――――――――――・ [注 意]PCGでポインタのトップ・アドレスを設定する場合、     テキスト・エリアやスタック・エリア、文字エリアに、     疑似PCG領域(6144バイト)が重ならないようにしてください。 [参 照]DEFCHR$,GPRINT,GPRINT USING,CLEAR        サンプル・プログラム  ・―――――――――――――――――――――・  | PRINT HEX$(PCG) |  ・―――――――――――――――――――――・ ・―――――――――――――――――――――――――――・ |       8000H・――――――――――――――・ | |          |↓■■■■■■■■■■■■■| | |          |■■■■■テキスト・エリア■■■■■| | |          |■■■■■■■■■■■■■■| | |          |――――――――――――――| | |          |↓             | | |          |              | | |          |     変数領域     | | |          |              | | |擬似PCGデフォルト    |              | | |トップ・アドレス→E000H |――――――――――――――| | |          |↓■PCGデフォルト ■■■■■■■| | |256キャラクタ分定義   |■■256キャラクタ6144バイト■■■■| | |したときのエンド・アドレス|■■■■■■■■■■■■■■| | |      →F860H|――――――――――――――| | |          |■(STAC)■■■■■■■■■■| | |          |↑■■■■■■■■■■■■■| | |          |――CLEAR によって変わる――| | |          |■文字領域(初期値 500バイト)■| | |          |↑■■■■■■■■■■■■■| | |       FFF8H|――CLEAR によって変わる――| | |          |↓■■■■■■■■■■■■■| | |          |■■■■■■■■■■■■■■| | |       FFFFH・――――――――――――――・ | ・―――――――――――――――――――――――――――・ ・―――――――――――――――――――――――――――・ |      ・―――――――・            | |      |       |            | |   C000H|―――――――|            | |      |■■■■■■■|――・         | |      |■■■A■■■|  ↓         | |      |■■■■■■■| 256キャラクタ分のデータ   | |   D860H|―――――――| 6144バイト       | |      |       |  ↑         | |   E000H|―――――――|  |         | |      |■■■■■■■|――・         | |      |■■■B■■■|            | |      |■■■■■■■|            | |   E800H|―――――――|            | |      |       |            | |      |       |            | |      ・―――――――・            | ・―――――――――――――――――――――――――――・